home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / euphor12 / retab.ex < prev    next >
Text File  |  1994-06-11  |  2KB  |  77 lines

  1.         -- re-tab a file --
  2. -- make better use of tabs to minimize file size
  3. -- and also delete blanks at end of line
  4. -- usage:  ex retab < src > dest
  5.  
  6. constant TAB_WIDTH = 8
  7.  
  8. type natural(integer x)
  9.     return x >= 0
  10. end type
  11.  
  12. function tab(natural pos)
  13. -- compute equivalent number of spaces for tab
  14.     return(floor(pos / TAB_WIDTH) + 1) * TAB_WIDTH
  15. end function
  16.  
  17. function retab(sequence line)
  18. -- make better use of tabs & delete trailing blanks
  19. -- to shrink line if possible
  20.     natural i, leading_white
  21.     sequence better_line
  22.  
  23.     i = 1
  24.     leading_white = 0
  25.     better_line = ""
  26.     while i < length(line) do
  27.     -- count leading white space
  28.     if line[i] = ' ' then
  29.         leading_white = leading_white + 1
  30.     elsif line[i] = '\t' then
  31.         leading_white = tab(leading_white)
  32.     else
  33.         exit
  34.     end if
  35.     i = i + 1
  36.     end while
  37.     while leading_white >= TAB_WIDTH do
  38.     better_line = better_line & '\t'
  39.     leading_white = leading_white - TAB_WIDTH
  40.     end while
  41.     better_line = better_line & repeat(' ', leading_white)
  42.                   & line[i..length(line)]
  43.     i = length(better_line)
  44.     while i >= 1 do
  45.     -- delete trailing blanks
  46.     if find(better_line[i], " \t") then
  47.         better_line = better_line[1..i-1] &
  48.               better_line[i+1..length(better_line)]
  49.     elsif better_line[i] != '\n' then
  50.         exit
  51.     end if
  52.     i = i - 1
  53.     end while
  54.     return better_line
  55. end function
  56.  
  57. procedure process_file()
  58.     object line
  59.     sequence better_line
  60.     natural savings
  61.  
  62.     savings = 0
  63.     while 1 do
  64.     line = gets(0)
  65.     if atom(line) then
  66.         exit
  67.     end if
  68.     better_line = retab(line)
  69.     savings = savings + length(line) - length(better_line)
  70.     puts(1, better_line)
  71.     end while
  72.     printf(2, "saved %d bytes\n", savings)
  73. end procedure
  74.  
  75. process_file()
  76.  
  77.